# -*- coding: utf-8 -*-
# @Time    : 2021/4/15 22:09
# @Author  : 夏思毅
# @Email   : 2739124228@qq.com
# @File    : 4-15python作业.py
# @Software: PyCharm

#1、密码验证
str = "QRsd34256"
same=set()
level=0



import string
def lenth(str):
    global level
    if len(str)<8:
        print("长度小于8,改！")
    else:
        level+=1
def sameword(str):
    global level
    for i in range(len(str)):
        if (i+2)<len(str) or (i+2)==len(str):
            if str[i]==str[i+1]==str[i+2]:
                print("连续重复，改！")
    else:
        level+=1
def different(str):
    global level
    leveladd1 = 0
    leveladd2 = 0
    leveladd3 = 0
    for i in str:
        if i.isdigit:
            leveladd1=1
        if i in string.ascii_uppercase:
            leveladd2=1
        if i in string.ascii_lowercase:
            leveladd3=1
    level = level + leveladd1 + leveladd2 + leveladd3
    if level<5:
        print("大小写字母数字都得有")
    print(f"评分等级：{level}")
lenth(str)
sameword(str)
different(str)





#2、列表去重并从大到小排序
# lista=[1,2,2,5,6,3,4]
# # listb=[]
# # for i in lista:
# #     for j in lista:
# print(lista)




#3、如果在一个函数内部修改全局变量
#4、如何跨模块共享全局变量






#5、python数据类型有哪些
# 整型（数字）、字符串、元组、列表、字典和布尔类型

#6、python中生成随机整数（1-10），随机小数（1-10），0-1之间小数的方法
# import random
# a=random.randint(1,10)
# b=random.uniform(1,10)
# c=random.random()
# print(a,b,c)


#7、python2与python3 的区别，列出5个
        # 1、输入输出
        #python2:
        #>>>print("hello")
        #hello
        #>>>print"hello"
        #hello

        #>>>num1=input("please input:")
        #please input:1
        #>>>type(num1)
        #<type'int'>>>>str1=input("pleaseinput:")
        #please input:'abc'
        #>>>type(str1)
        #<type'str'>
        #>>>str2=raw_input("please rawinput:")
        #please rawinput:
        #>>>type(str2)
        #<type'str'>
        #输入：
        #python3中的input得到为str
        #python2中的input默认为int，str要使用引号包裹，raw_input得到的是str
        # 2、模块与包
        #python2包文件必须要有一个__init__.py才能被识别程包目录
        #python3可以识别把普通目录识别成包，不一定需要__init__.py
        #python2默认是相对导入
        #python3是绝对导入
        # 3、编码
        #python2默认是ascii编码
        #python3默认是utf-8编码
        # 4、数值类型
        # #python2有长整型
        # #python3只有整形
        # 5、运算符
        # #python2中的除法运算符为地板除，不是真除。转化成浮点数才表示真除
        # #python3中的除法就是真除
        # 6、字符串拼接
        # #python3可以使用f标志位拼接，python2不可以
        # 7、range与xrange
        # #python2:range(0,4)-->结果：[0,1,2,3]
        # #xrange(0,4)-->结果：可迭代对象（惰性求值，使用的时候再生成值）
        # #python3：没有xrange，range函数就是python2中的xrange
        # 8、布尔类型
        # #python2True、False都没有定义成关键字
        # #python3True、False都是关键字
        # 9、异常机制
        #python2：
        #try:
        #...
        #except Exception,e:
        #...
        #python3:
        #try:
        #...
        #except Exception as e:
        #...
        #10、字节码文件
        #python3存放在同级目录下的__pycache__文件夹
        #python2直接存放在同级目录下，.pyc结尾文件
        #__future__把下一个版本的特性导入到当前版本
        #>>>from__future__import division
        #>>>5/3
        #1.6666666666666667


        # 1、输入输出
        # 2、模块与包
        # #python2包文件必须要有一个__init__.py才能被识别程包目录
        # #python3可以识别把普通目录识别成包，不一定需要__init__.py
        # #python2默认是相对导入python3是绝对导入




#8、python中哪些是可变数据类型，哪些是不可变数据类型，为什么
# 数据类型	可变/不可变
# 整型	    不可变
# 字符串	    不可变
# 元组	    不可变
# 列表	    可变
# 集合	    可变
# 字典	    可变
# 　不可变数据类型： 当该数据类型的对应变量的值发生了改变，那么它对应的内存地址也会发生改变，对于这种数据类型，就称不可变数据类型。
# 　可变数据类型    ：当该数据类型的对应变量的值发生了改变，那么它对应的内存地址不发生改变，对于这种数据类型，就称可变数据类型。
# 　不可变数据类型更改后地址发生改变，可变数据类型更改地址不发生改变






#9、统计字符串中每个单词出现的次数
# a={}
# f='i am happy happy very much'
# count = 0
# for i in f:
#     if i in a :
#         count+=1
#     else:
#         count=1
#     print(f'{i}有{count}个')







#10、给定一个字符串，找到字符串中第一个重复的字符
# def same(word):
#     sameword=[]
#     for i in range(0,len(word)):
#         if word[i] in sameword:
#             print(word[i])
#         else:
#             sameword.append(word[i])
# same('sgvqev')



#11、什么是pep8
# PEP是 Python Enhancement Proposal 的缩写，翻译过来就是 Python增强建议书
# PEP8 是一个编程规范，内容是一些关于如何让你的程序更具可读性的建议。






#12、python里如何赋值，深拷贝与浅拷贝的区别
# 浅拷贝(copy)：拷贝父对象，不会拷贝对象的内部的子对象。
#
# 深拷贝(deepcopy)： copy 模块的 deepcopy 方法，完全拷贝了父对象及其子对象。







#13、简述python的内存管理机制
# 引入计数、垃圾回收、内存池机制
#引用计数
#当有新的引用指向的时候，引用计数+1
#当有无效的引用发生的时候，引用计数-1
#当对象的引用计数为0的时候，销毁对象

# Python中的垃圾回收是以引用计数为主，分代收集为辅。引用计数的缺陷是循环引用的问题。
# 当Python的某个对象的引用计数降为0时，说明没有任何引用指向该对象，该对象就成为要被回收的垃圾。比如某个新建对象，被分配给某个引用，对象的引用计数变为1。如果引用被删除，对象的引用计数为0，那么该对象就可以被垃圾回收。



#14、使用python实现冒泡排序
# a = [36,25, 48, 12, 25, 65, 43, 1]
# for j in range(len(a)-1):
#     for i in range(len(a)-1):
#         if a[i] > a[i+1]:#左右比较
#             a[i],a[i+1] = a[i+1],a[i]#如果左边比右边大，两者位置互换
#             # print(i)
# print(a)

# def pao_sort(ls):
#     if len(ls) <= 1:
#         return ls
#     else:
#         for j in range(len(ls) - 1):
#             for i in range(len(ls) - 1):
#                 if ls[i] > ls[i+1]:
#                     ls[i],ls[i+1] = ls[i+1],ls[i]
#         return ls
# if __name__ == '__main__':
#     ls = [36,25, 48, 12, 25, 65, 43, 1]
#     print(pao_sort(ls))









#15、使用python实现快速排序
# def q_sort(lst):
#     less = [];greater = []
#     if len(lst) <= 1:
#         return lst
#         # print(array)
#     else:
#         dd = lst.pop()
#         for x in lst:
#             if x <= dd:
#                 less.append(x)
#                 # print(less)
#             else:
#                 greater.append(x)
#                 # print(greater)
#         return q_sort(less) + [dd] + q_sort(greater)
# if __name__ == '__main__':
#     ls = [2,1,5,4,8,3,5]
#     print(q_sort(ls))



#16、输出九九乘法表
# for i in range(1,10):
#     for j in range(1,i+1):
#         print(f"{j}*{i}={i*j}",end=" ")
#     print()

#17、重复接受用户的数据，如果是正整数就输出结果，否则一直输入
# while 1:
#     a=input()
#     if a.isdigit():
#         print(f"{a}是正整数")
#         break
#     else:
#         print("请重新输入")




#18、有两个列表[11,-3,4,5,2,1,8] , [9,3,4,2,6,-10] 把它们合并成一个列表，并且从小到大排序
# a=[11,-3,4,5,2,1,8]
# b=[9,3,4,2,6,-10]
# for i in b:
#     a.append(i)
# a.sort()
# print(a)

#19、a+=1 与 a=a+1 有什么区别

# 对于可变对象，a += 1 直接在原内存地址上操作a = a + 1开辟新的内存操作
# 对于不可变对象，a += 1和a = a + 1都是在新开辟的空间操作

